/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.openide.util.enum;
import java.util.Enumeration;
import java.util.NoSuchElementException;
/** Abstract class that takes an enumeration and filters its elements.
* To get this class fully work one must override <CODE>accept</CODE> method.
* Objects in the enumeration must not be <CODE>null</CODE>.
*
* @author Jaroslav Tulach
* @version 0.10 September 11, 1997
*/
public abstract class FilterEnumeration extends Object implements Enumeration {
/** enumeration to filter */
private Enumeration en;
/** object to be returned next time */
private Object next;
/**
* @param en enumeration to filter
*/
public FilterEnumeration (Enumeration en) {
this.en = en;
}
/** Filters objects. Overwrite this to decide which objects should be
* included in enumeration and which not.
* @param o the object to decide on
* @return true if it should be in enumeration and false if it should not
*/
protected abstract boolean accept (Object o);
/** Tries to find next object. And sets it to the next field.
* @return true if there is such one, false if there is not
*/
private boolean getNext () {
if (next != null) {
// there is a object already prepared
return true;
}
while (en.hasMoreElements ()) {
// read next
next = en.nextElement ();
if (accept (next)) {
// if the object is accepted
return true;
};
}
next = null;
return false;
}
/** @return true if there is more elements in the enumeration
*/
public boolean hasMoreElements () {
return getNext ();
}
/** @return next object in the enumeration
* @exception NoSuchElementException can be thrown if there is no next object
* in the enumeration
*/
public Object nextElement () {
if (!getNext ()) {
throw new NoSuchElementException ();
}
Object res = next;
next = null;
return res;
}
}
/*
* Log
* 5 Gandalf 1.4 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 4 Gandalf 1.3 6/8/99 Ian Formanek ---- Package Change To
* org.openide ----
* 3 Gandalf 1.2 4/16/99 Libor Martinek
* 2 Gandalf 1.1 1/5/99 Ian Formanek
* 1 Gandalf 1.0 1/5/99 Ian Formanek
* $
*/